package com.imut.lagain.service;
import org.slf4j.LoggerFactory;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 生理期健康报告服务接口
 */
public interface IPeriodReportService {
    
    /**
     * 生成月度健康报告
     * @param userId 用户ID
     * @param year 年份
     * @param month 月份
     * @return 月度报告数据
     */
    Map<String, Object> generateMonthlyReport(Long userId, int year, int month);
    
    /**
     * 生成周期趋势分析
     * @param userId 用户ID
     * @param months 分析月数
     * @return 趋势分析数据
     */
    Map<String, Object> generateCycleTrend(Long userId, int months);
    
    /**
     * 生成症状统计报告
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 症状统计数据
     */
    Map<String, Object> generateSymptomReport(Long userId, LocalDateTime startDate, LocalDateTime endDate);
    
    /**
     * 生成健康评分
     * @param userId 用户ID
     * @param months 评估月数
     * @return 健康评分数据
     */
    Map<String, Object> generateHealthScore(Long userId, int months);
    
    /**
     * 获取周期日历数据
     * @param userId 用户ID
     * @param year 年份
     * @param month 月份
     * @return 日历数据
     */
    Map<String, Object> getCalendarData(Long userId, int year, int month);
    
    /**
     * 生成专业建议
     * @param userId 用户ID
     * @param reportType 报告类型
     * @return 专业建议列表
     */
    List<Map<String, String>> generateProfessionalAdvice(Long userId, String reportType);
    
    /**
     * 导出健康数据
     * @param userId 用户ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param format 导出格式 (json, csv)
     * @return 导出数据
     */
    Map<String, Object> exportHealthData(Long userId, LocalDateTime startDate, LocalDateTime endDate, String format);
    
    /**
     * 获取数据可视化配置
     * @param userId 用户ID
     * @param chartType 图表类型
     * @return 可视化配置
     */
    Map<String, Object> getVisualizationConfig(Long userId, String chartType);
    
    /**
     * 生成周期预测准确性报告
     * @param userId 用户ID
     * @param months 分析月数
     * @return 预测准确性数据
     */
    Map<String, Object> generatePredictionAccuracy(Long userId, int months);
    
    /**
     * 获取健康指标趋势
     * @param userId 用户ID
     * @param indicator 指标类型 (cycle_length, period_length, symptoms)
     * @param months 分析月数
     * @return 指标趋势数据
     */
    Map<String, Object> getHealthIndicatorTrend(Long userId, String indicator, int months);
}
